Yonsen, обычно юзают предметную способность "запас здоровья" до 999999к хп. Обычно на все случаи жизни, любимый метод. Даем ее в момент нанесения урона. Когда срабатывает событие "юнит получает", то в этот момент урон еще не произошел, нам как бы оповешают, что он будет через 0.00 сек. Получает пассивку и через 0.00 сек урон. Потом хилим. И удаляем способность. Все.
Событие: Юнит приводит способность в действие
Условие: Примененная способность = Увечье(или что там)
Действие: Уменьшить размер цели заклинания(не имею понятия как там это будет называться, но суть такова)
ну все по стандарту - проверка на вирусы, проверка реестра, чистка реестра, дефрагментация диска, проверка диска, установка в другую директорию, откат на точку восстановления
The Dude, это несерьезно. Все вопросы описаны в большом количестве статей здесь, на нашем сайте - xgm.guru/p/wc3/articles. То, что перечисляешь не верх мастерства WE, а базовые знания. Материалов предостаточно. Успехов в обучении.
Proshel_Doty, иди учи тер вер
если тебя не устраивает то как работает здравый смысл то убей себя
если тебе повезёт то ты переродишься в мире который тебя устраивает
если хочешь чтобы срабатывала каждые 5 раз то это не случайность а тупо счётчик
Как вариант - изначально экструдить ребра, а не с полигоны, там где нужны плоские поверхности. Главное не забыть 2-сторонний материал использовать потом.
а) Создай 2 переменные-массива по типу "боевая единица" (массив - чтобы для каждого игрока, мы ведь за мультиплеер трем, прально?), назови типа MyChampion и MyChampionDummy.
б) подготовь невидимого героя-пустышку с нужной тебе иконкой, убери ману, если у чемпиона ее нет. Убери ему радиус обзора, убери галочки типа "отмечать на мини-карте" - остальные - опционально.
В дальнейшем мы будем синхронизировать пустышку и реального чемпиона, создавая видимость одной боевой единицы.
Итак, наш первый триггер:
в) Отследи первое появление чемпиона, когда это случится - создай для игрока героя-пустышку. Соответственно сделай MyChampion [number of (Owner of trained unit)]= last trained unit, следующей строчкой создай того самого героя-пустышку для (owner of trained unit) и сделай MyChampionDummy = last created unit. Теперь мы прочно связали этих чуваков. Этот же триггер запускает остальные.
г) Отслеживание здоровья. Сделай изначально выключенный цикличный триггер, там, каждые 0.3 секунды. Триггер запускается пунктом в). Каждые 0.3 секунды меняй здоровье героя (чья икона висит, надо чтобы она соответствовала, прально?) в % на здоровье самого чемпиона.
д) пропищи событие, мол, если выбирает игрок своего героя (кликая на иконку) выбирается чемпион
е) убивай героя вместе с чемпионом
ж) отключай триггеры с проверкой и выбором, пока чемпион мертв
з) не забывай обновлять переменную чемпиона с каждым новым чемпионом.
Артес Менетил, для начал в задницу яндекс - трешак еще тот, используй гугл. А дальше слушай, напрямую конвертера в MDX с дренора не существует, Импортируй M2 в макс скриптом, потом экспортируй в MDX и используй, экспортировать можешь скрипом экспорта в MDX и вручную добавить материалы в W3ME. Оба скрипта есть на сайте, если тебе нужны юниты с анимациями - тут нужно с бубном поплясать и методами, которых я не знаю, либо скачать плагин NeoDex с хайва и экспортировать через него со всеми прекрасностями, но там тоже нужно будет настраивать, читай гайды на том же хайве, только учти, что они все не на русском
Извлечь м2 можешь программами работающими с новым форматом архивов CASCExplorer или CASCViewer
Учись пользоваться гуглом.
Есть много торрентов, разных сайтов где можно его скачать.
Я бы тебе скинул, но, тут видимо запрещено помогать ссылками. Увы.(
Ну как бы там все одно да потому, код тот же что я описал выше, вот только проверять все надо в МУИ это раз, два время затраченное на синхронизацию может быть пипец каким большим...
function Trig_SyncStr_Actions takes nothing returns nothing
local string splayer = null
local player pl = Player(0)
if GetLocalPlayer() == pl then
call StoreString( udg_Data, "A", "B", "твоя строка!" )
endif
call TriggerSyncReady()
if GetLocalPlayer) == pl then
call SyncStoredString( udg_Data, "A", "B" )
endif
call TriggerSleepAction( 2.00 )
call TriggerSyncReady()
set splayer = GetStoredString( udg_Data, "A", "B" ) // выгрузи строку из кеша в локалку и делай с ней что хочешь
endfunction
//===========================================================================
function InitTrig_SyncStr takes nothing returns nothing
set gg_trg_SyncStr = CreateTrigger( )
call TriggerAddAction( gg_trg_SyncStr, function Trig_SyncStr_Actions )
endfunction
Триггер запускаем ExecuteTrigger а "Твоя строка" заменяется на глобальную переменную.
Сделай проверку на приказы. если допустим ты его заставляешь бежать куда то отменяешь приказ и делаешь ему другой приказ стоять или бежать) или что он там у тебя делает
UniverseRuler, в доте 6-6 использованы игроки 13 и 14
тебе нужно просто сохранять приказ отданный триггерно(ты ведь ими будешь юнитами управлять)
и восстанавливать его при получение приказа для игрока
для этого нужна буленовская переменная для определения триггерный это приказ или нет
и структура/хэш/юзердата для сохранения приказа UniverseRuler:
еще остались асы картостроения, но а сейчас начинаю думать, что их все таки нету
если ас картостроения это человек который воплощает все ваши фантазии в жизнь то тут таких нету и не было
ещё можно создавать всех юнитов за 1 резервного игрока
а автоатаку делать триггерно
этот вариант самый лучший но то просто не сможешь его сделать
ибо нужны джасс+алгоритмы+структуры/хэш
а ты судя по всему ничего из этого не знаешь
Пордон, там мой косяк. Давно на GUI не работал. Вот так верно.
теперь кастом скрипт таков
call UnitAddItemToSlotById(GetManipulatingUnit(),'id вашего предмета',GetForLoopIndexA()-1)
я просто предмет сравнивал с предметом (1=1?)
а надо было 1=x?
в общем щас правльно
карту еще прикрепил. С тебя "+"
Tand, под кодировкой я имею в виду кодировку. Есть такая штука, определяет какими комбинациями нулей и едениц в бинарном виде кодируется каждый символ. Если при сохранении использована не та кодировка, которую понимает игра, то игра, соответственно, неможет сопоставить нулям и еденицам из файла конкретные символы, а значит ничего не показывает или показывает совсем не то, что было написано изначально.
Скачай Notepad++ -встроенные в винду средства годятся разве что заметки о жизни офисного планктона писать.
Wyett, ты можешь добавлять подобные этим:
function ... takes ... returns ...
Код
endfunction
Резака купить можно, но это будет абсолютно не похоже на покупку дирижабля.
Сделай так чтобы игрок (ии) которому принадлежат войска проиграл в самом начале и ии для него откл, и крипы не будут ждать а будут выполнять то что ты прописал в триггерах.
Maniac_91, область это хэндл а значит утекает
максимального количества областей ограничивается количеством оперативной памяти (до 2 гигов вроде) и максимальным количеством хэндлов (2 в 32 степени)
больше ни чем EnergyFrost:
Максимум что тебя ожидает- лаги, которые ты получишь из-за утечек, работая с этими областями. Так что старайся не наплодить утечек и все будет окей.
как правило работа со статичными областями не вызывает утечек (если их не копировать)
ограничений на декорации тоже нету к слову (если не юзать устаревший редактор)
Кристофер, это происходит из-за того, что в материале травы стоит галочка "Незатуманенный" (в переводе ошибка, следовательно, нужно читать "Незатеннёный"). Просто сними галочку и всё заработает.
Это можно сделать путем наложения полупрозрачного черного экрана, правда все в действительности будет как при паузе, действия в игре происходить будут но хп-бары и прочее пропадет
На сколько я помню, делается это с помощью того что на скрине, только там импортировать нужно свой полупрозрачный черный экран
Скрин увы не прогрузился, но поясню так:
Это делается функцией: Спецэффекты -> Фильтр затемнения
P.s. Дурацкий лимит времени на редактирование комментов
Это происходит из-за per-vertex освещения. От подобных визуальных артефактов очень сложно избавиться, но можно немного замаскировать их, подкорректировав модели освещения (например, немного уменьшить интенсивность diffuse освещения и увеличить ambient):
В War3 Model Editor, в окне настроек материалов убрать метку "незатенённый" или "незатуманенный" (лучше обе, а то там вроде как они местами перепутаны).
vincent_freeman, как вариант - держать всегда только одну настоящую способность для строительства и переключать её пустышками. Можно даже попробовать автоматически при нажатии на пустышку активировать строительство чтобы игроку осталось только навести на точку и нажать.
Maxsavin, я каждой карте из кампаний даю свой кэш, чтобы не перепуталось ничего.
Не знаю, что получилось бы, сделай я один кэш-файл на всю кампу и грузи карты потом не по порядку. Проверять не буду. Кампания - это пак карт.
Если твоя цель - непрерывание приказа и сохранение инвиза при изучении способности - лови нажатие на спеллбук и переключайвыбор на дамми юнит, тоже со спеллбуком. Давай приказ на горячую клавишу спеллбука, чтобы сымитировать открывание меню у самого героя. После изучения скилла - возвращай героя в выбор.
тут правда есть запары - насколько я знаю ни нажатие на книгу ни нажатие возврата в неё не отлавливаются.
Значит делаем так:
Кнопка изучения способностей - пусть будет веерный бросок с временем подготовки 3 сек например, нам важно чтобы она не активировалась.
Юнит начинает направлять способность
способность = веерный бросок
пауза юнит
приказ юниту отставить
продолжить юнит
выбор - выбрать дамик
кнопка "отмена" у дамика - тоже должна быть способностью. При нажатии способности дамика возвращаем выбор на героя, можно при этом проверить оставшиеся очки способностей, чтобы не переключать, если они ещё не кончились.
Делать всё точно как я написал. Герой не будет выходить из невидимости, но к сожалению приказ всё же будет сбиваться.
Обхода я пока не вижу, остальные способы можно будет абузить.
отлов урона делается через событие юнит получил урон
всё остальное описано в статье
от тебя только мозг понадобится и хотя бы 1 рука
атачить можно через хэш/юзердату/хэндл
основы потом могут быть за разную плату превращены в разные здания
Так и делай превращение, а не постройку здания "основой". Улучшай основу в выбранное здание - как башня Альянса улучшается до сторожевой, орудийной или магической.
Как объединить зелья лечения в одно с зарядом, если герой имеет одно в инвентаре и поднимает второе?
обычно используют "событие - юнит получает предмет", И на предмет, который вы получаете, ссылается переменная, которая называется item being manipulated. А юнит, который получает итем - Triggering Unit. Вы можете с помощью этой переменной итема узнать тип, сравнить. Потом циклом пробегаете по слотам (от 1 до 6), тут вся суть в одной команде триггерной (item in slot X, итем в слоте Х) и проверяете есть ли такой же итем (не забываем делать проверки, на то что этот предмет не равен item being manipulated и сравниваете не одинаковые ли типы). Если есть такой же (находите тот же тип что и item being manipulated), то от item being manipulated берете заряды и прибавляете к зарядам существующего, а потом item being manipulated удаляете. Недостаток: при заполненном инвентаре такая штука не будет работать.Не хватает свободного места.
код
цикл А от 1 до 6
if тип итема (item being manipulated) РАВНО тип итема (item in slot А) and item being manipulated НЕ РАВНО item in slot А then проверяете
set k = Charges remaining in ( item being manipulated) + Charges remaining in ( item in slot А) складываете заряды
Set charges remaining in ( item in slot А) to ( k) устанавливаете кол-во зарядов
Remove Item (item being manipulated) удаляете
endif
Есть гуишная проверка на наличие итема определенного типа в инвентаре, но она утечна. И лучше циклом прогонять.
Кстати выше пример, там вот дропают итем, зачем? чтобы проверить есть ли такой же итем. А то мб проверка на наличие итема определенного типа в инвентаре найти подобранный итем. А нам нужно знать, что есть еще один, кроме подобранного. Поэтому дропают. Только не понятно зачем создаете новый итем.
Проверка, на то что подобранный предмет имеет зарядов больше 0, говорит нам о том что это не обычный предмет.
есть статьи
Как зелье с зарядом разделить, если игрок перекладывает зелье с зарядом в другую ячейку инвентаря, если возможно, то разделение происходить должно только при нажатии какой-то клавиши?
можно перекладывать в другой слот. для этого ловят приказ. Короче смотрите системы CCS
там создают новый такой же предмет, и выделяют кол-во зарядов, деля поровну например. Абилкой например, попробуй сделать целевую активную абилку с целью предмет, указывай на инвентарь и дели.
Как это можно сделать покороче для множества разных типов предметов?
всмысле покороче? сделать под одну группу? есть же классификация. Я вот делаю так, что все предметы, которые с зарядами, должны иметь классификацию "с зарядами". Не помню точно как называется класс итемов.
Как правильно реализовать в инвентаре 7 слот?
если у героя заполнен инвентарь, то он может подобрать руну. Вот в доте система скрещивания. То же самое можно сделать и с зарядами. На земле у него лежат руны, при подборе руна исчезает. Но мы проверяем слоты, есть ли такой итем. Если есть, прибавляем заряды к существующему. Иначе создать новый. При дропе итема, оригинал подменяет снова на руну. В руну можно передать значения зарядов.
А также ограничения какие-то на количество зарядов нужно ставить или сама система выше какой-то планки не даст собирать?
до такого не доходил.
скинул примеры (хотя многие дурацкие, но делал здесь хгм в качестве ответов)
вот еще одна система hh
там 2 баффа, для ближнего и дальнего боя. Ты поменял 1 из баффов, а другой не поменял, все дела.
Просто можно откопировать его в строке баффов и написать 2 раза.
Smart096, баг только в этой карте?
в новых картах бага нету?
если да то стоит проверить импортируемые модели и текстуры (мб часть битая)
но с вероятностью в 60% проблема в системе ибо было много жалоб на баги в вин10
Было создано 22 366 679 экземпляров класса CUnitListNode, которые заняли 255.9 МБ памяти.
При очередной попытке выделения, игра упала.
Виной всему утечки памяти: за 21 минуту набралось 80 тысяч групп и 20 тысяч точек.
Также, из-за выполнения большого количества кода, сильно лагает.
На стадии выбора героя (первые две минуты), выполняется 550 000 операций в секунду, а далее — 1 200 000.
Для сравнения: лимит потока — 300 000 операций.
Хорошо, что ты приложил карту, так как в логе маловато информации.
globals
player Pl = null
endglobals
function abc takes nothing returns boolean
return IsUnitEnemy(GetFilterUnit(), Pl)
endfunction
function zemle takes nothing returns nothing
local unit u = GetTriggerUnit()
local group g = CreateGroup()
local real x = GetUnitX(u)
local real y = GetUnitY(u)
local real Random = GetRandomReal(0, 360)
local boolexpr d = Condition(function abc)
set Pl = GetTriggerPlayer()
call GroupEnumUnitsInRange( g, x, y, 850, d )
call ForGroup( g, function zemlee )
call UnitApplyTimedLife(CreateUnit (p, 'h007',x,y,Random),'BFiq',0.50 ) // ???
call DestroyGroup(g)
call DestroyBoolexpr(d)
set u = null
set p = null
set g = null
set d =null
endfunction
предмет это просто иконка которая содержит способности
книга заклинания это способность
и редактировать нужно способность "книга заклинаний"
или создать на её основе новую способность "моя книга заклинаний"
а потом у предмета просто указать способность "моя книга заклинаний"
если не хватает знаний то их можно пополнить в статьях
GhostKing2017, триггера у меня нет, так напишу.
Переменная-массив - юнит (например, Shop). В примере их будет три.
Юниты-магазины назвать по порядку: Shop[1], Shop[2], Shop[3] (и т. д.)
Целочисленная переменная i для массива
Способности без цели: Вперёд, Назад
Триггер
Событие
Юнит применяет способность.
Условие
Применяемая способность = Вперёд или применяемая способность = Назад
Действие
Если применяемая способность = Вперёд, то установить i = i +1.
Если применяемая способность = Назад, то установить i = i -1.
Если i больше 3, то установить i = 1
Если i меньше 1, то установить i = 3
Выбор - выбрать Shop[i] для переключающего игрока
P.S. Советую удалить русификатор, там обычно много косяков с переводом.
Как объединить зелья лечения в одно с зарядом, если герой имеет одно в инвентаре и поднимает второе?
обычно используют "событие - юнит получает предмет", И на предмет, который вы получаете, ссылается переменная, которая называется item being manipulated. А юнит, который получает итем - Triggering Unit. Вы можете с помощью этой переменной итема узнать тип, сравнить. Потом циклом пробегаете по слотам (от 1 до 6), тут вся суть в одной команде триггерной (item in slot X, итем в слоте Х) и проверяете есть ли такой же итем (не забываем делать проверки, на то что этот предмет не равен item being manipulated и сравниваете не одинаковые ли типы). Если есть такой же (находите тот же тип что и item being manipulated), то от item being manipulated берете заряды и прибавляете к зарядам существующего, а потом item being manipulated удаляете. Недостаток: при заполненном инвентаре такая штука не будет работать.Не хватает свободного места.
код
цикл А от 1 до 6
if тип итема (item being manipulated) РАВНО тип итема (item in slot А) and item being manipulated НЕ РАВНО item in slot А then проверяете
set k = Charges remaining in ( item being manipulated) + Charges remaining in ( item in slot А) складываете заряды
Set charges remaining in ( item in slot А) to ( k) устанавливаете кол-во зарядов
Remove Item (item being manipulated) удаляете
endif
Есть гуишная проверка на наличие итема определенного типа в инвентаре, но она утечна. И лучше циклом прогонять.
Кстати выше пример, там вот дропают итем, зачем? чтобы проверить есть ли такой же итем. А то мб проверка на наличие итема определенного типа в инвентаре найти подобранный итем. А нам нужно знать, что есть еще один, кроме подобранного. Поэтому дропают. Только не понятно зачем создаете новый итем.
Проверка, на то что подобранный предмет имеет зарядов больше 0, говорит нам о том что это не обычный предмет.
есть статьи
Как зелье с зарядом разделить, если игрок перекладывает зелье с зарядом в другую ячейку инвентаря, если возможно, то разделение происходить должно только при нажатии какой-то клавиши?
можно перекладывать в другой слот. для этого ловят приказ. Короче смотрите системы CCS
там создают новый такой же предмет, и выделяют кол-во зарядов, деля поровну например. Абилкой например, попробуй сделать целевую активную абилку с целью предмет, указывай на инвентарь и дели.
Как это можно сделать покороче для множества разных типов предметов?
всмысле покороче? сделать под одну группу? есть же классификация. Я вот делаю так, что все предметы, которые с зарядами, должны иметь классификацию "с зарядами". Не помню точно как называется класс итемов.
Как правильно реализовать в инвентаре 7 слот?
если у героя заполнен инвентарь, то он может подобрать руну. Вот в доте система скрещивания. То же самое можно сделать и с зарядами. На земле у него лежат руны, при подборе руна исчезает. Но мы проверяем слоты, есть ли такой итем. Если есть, прибавляем заряды к существующему. Иначе создать новый. При дропе итема, оригинал подменяет снова на руну. В руну можно передать значения зарядов.
А также ограничения какие-то на количество зарядов нужно ставить или сама система выше какой-то планки не даст собирать?
до такого не доходил.
скинул примеры (хотя многие дурацкие, но делал здесь хгм в качестве ответов)
вот еще одна система hh
Вот так можно, но на это придётся потратить UnitUserData, если в гуи.
Правда есть минус, предметы будут менять позиции в инвентаре. Если до слота предмета(слот 3, к примеру) было пусто, то предмет займет пустой слот(станет слот 1)
» WarCraft 3 / как сделать респавн крипов?
» WarCraft 3 / Уменьшение атаки
» WarCraft 3 / World editor.
» WarCraft 3 / Очень нестандартные способности.
» Game Dev / Какой движок выбрать?
» 3D Арт и VR / Blender
» WarCraft 3 / Окно здоровья.
» WarCraft 3 / Модели из World of Warcraft
» WarCraft 3 / Синхронизация строк
» WarCraft 3 / Убрать контроль юнита!
» WarCraft 3 / Не могу сделать триггер - как мне кажется простой
» WarCraft 3 / Mpq Editor
» WarCraft 3 / Искусственный интеллект
» WarCraft 3 / Дублируются вещи.
» WarCraft 3 / Освещение
» WarCraft 3 / Триггеры и Нестандартные абилки
» WarCraft 3 / Загрузить предмет из кэша
» WarCraft 3 / Опыт для не героев
» WarCraft 3 / Подскажите стоимость.
» WarCraft 3 / Проверка импорта
» WarCraft 3 / Инвентарь для кампании
» WarCraft 3 / Странная ошибка
» WarCraft 3 / GetTriggerPlayer( )
» WarCraft 3 / Нажатие на предмет
» WarCraft 3 / Типы музыки